﻿using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Maestro_Proveedores;

namespace Maestro_Proveedores.Forms
{
    public partial class CalificacionFinanciera : Form
    {

        /// <summary>
        /// Identificador del formulario, esta variable utilizada para controlar el acceso al formulario y para realizar la auditoria
        /// </summary>
        public static string TIPO = "062";
        /// <summary>
        /// Este registro tiene los permisos que tiene usuario que inicio sesion sobre el presente formulario (lectura, escritura, etc..)
        /// </summary>
        private Auditoria.CORPORATIVADataSet.SEG_PERMISOSRow seg_PERMRow = null;
        /// <summary>
        /// Este formulario tiene la responsabilidad de gestionar la informacion correspondiente a las calificaciones financieras que se les realicen a los proveedoresde la corporación. 
        /// </summary>
        public CalificacionFinanciera()
        {
            InitializeComponent();
            this.fecha_evaluacionDateTimePicker.MaxDate = System.DateTime.Now.Date;              
        }

        private void calificacionFinanciera_Load(object sender, EventArgs e)
        {
            this.pRV_proveedorTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, "0");
            
            //--- registrar los resultados de la evaluacion financiera
            this.cORPORATIVADataSet.ESTADO.AddESTADORow(true, "Habilita");
            this.cORPORATIVADataSet.ESTADO.AddESTADORow(false, "NO habilita");
            
            //--- auditoria
            if (ConfiguracionDelSistema.auditar)
            {
                Session.SEG_PERMISOSTableAdapter.FillByTipoGrupo(Session.AUDITORIADataSet.SEG_PERMISOS, TIPO + Session.Seg_USUARRow.CODGRU);
                this.seg_PERMRow = Session.AUDITORIADataSet.SEG_PERMISOS[0];
            }

            //--- verificar si el usuario tine permisos para editar la informacion del formulario
            if (!Session.Seg_PERMRow.MODIFICAR)
            {
                this.pRV_calificacion_financieraADDbindingNavigator.Enabled = false;
                this.pRV_calificacion_financieraDELETEbindingNavigator.Enabled = false;
                this.pRV_calificacion_financieraSAVEBindinNavigator.Enabled = false;
            }             
        }

        private void buscar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            if (this.textBox_nit_buscar.Text == "")
            {
                return;
            }

            //--- si tiene 4 o menos caracteres es muy problable que sea el ID
            if (this.textBox_nit_buscar.Text.Length <= 4)
            {
                //-- si no lo encuentro por el ID, lo busco por el NIT
                if (0 == this.pRV_proveedorTableAdapter.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text))
                {
                    this.pRV_proveedorTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text);
                }
            }
            //--- si tiene mas de 4 caracteres es muy provable que sea el NIT
            else
            {
                //-- si no lo encuentro por el NIT, lo busco por el ID
                if (0 == this.pRV_proveedorTableAdapter.FillByNit(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text))
                {
                    this.pRV_proveedorTableAdapter.FillById(this.cORPORATIVADataSet.PRV_PROVEEDOR, this.textBox_nit_buscar.Text);
                }
            }   

            if (this.cORPORATIVADataSet.PRV_PROVEEDOR.Rows.Count>0)
            {
                this.pRV_calificacion_financieraTableAdapter.FillByIdProveedor(this.cORPORATIVADataSet.PRV_calificacion_financiera, this.cORPORATIVADataSet.PRV_PROVEEDOR[0].id);
                this.pRV_calificacion_financieraBindingSource.AddNew();
            }
            else
            {
                MessageBox.Show("Este proveedor aun no ha sido registrado en el sistema.");
            }            

            Cursor.Current = Cursors.Default;
        }

        private void buscar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.buscar_Click(null, null);
            }
        }
  
        #region Exepciones en la insercion de datos

        private void dataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //MessageBox.Show("ERROR...\n" + e.Exception.ToString());
            //MessageBox.Show(sender.GetType().ToString());
            ((BindingSource)((DataGridView)sender).DataSource).CancelEdit();
        }

        #endregion

        #region Eventos asociados a los botones del BindingNavigator

        private void add_Click(object sender, EventArgs e)
        {
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.AddNew();
                this.fecha_evaluacionDateTimePicker.Value = System.DateTime.Now.Date;

            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
            }
        }

        private void pRV_calificacion_financieraSAVEBindinNavigator_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                //-- actualizo las fechas, para evitarq ue salga algun error (no ha definido el valor de la fecha)
                this.fecha_evaluacionDateTimePicker.Value = this.fecha_evaluacionDateTimePicker.Value.AddMinutes(1);
                //-- guardo el archivo de soporte
                if (!this.guardarArchivoDocumento()) 
                    return;
                
                Validate();
                bs.EndEdit();
                //---auditoria
                if (ConfiguracionDelSistema.auditar)
                {
                    string[] usuArios = new string[] { Session.Seg_USUARRow.USUARIO, TIPO, string.Empty, string.Empty };
                    Session.AUDITORIADataSet.CargarAuditoria(this.cORPORATIVADataSet.PRV_calificacion_financiera, usuArios, this.seg_PERMRow);
                    Session.AUDITORIADataSet.GuardarAuditoria();
                }
                //---actualizar la lista
                this.pRV_calificacion_financieraTableAdapter.Update(this.cORPORATIVADataSet.PRV_calificacion_financiera);
            }
            catch (Exception ex)
            {                   
                //-- si se presenta algun error, borro el archivo de soporte, de tal modo que el usuario debe seleccionarlo de nuevo.
                herramientas.File.deleteFile(ConfiguracionDelSistema.directorioCalificacionFinanciera+this.archivo_documentosTextBox.Text);
                //-- borro el contenido del campo
                this.archivo_documentosTextBox.Text = string.Empty;

                Maestro_Proveedores.herramientas.MessageException.show(ex);                 
            }
            Cursor.Current = Cursors.Default;
        }

        private void deshacer_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    if (dt.TableName.Equals(bs.DataMember.ToString()))
                    {
                        dt.RejectChanges();
                        bs.CancelEdit();
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filter_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.RemoveFilter();
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filterText_TextChanged(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripTextBox)sender).GetCurrentParent()).BindingSource;
            ToolStripTextBox tb = (ToolStripTextBox)sender;
            try
            {
                String filtro = "";
                foreach (DataTable dt in this.cORPORATIVADataSet.Tables)
                {
                    if (bs.DataMember.ToString().Contains(dt.TableName))
                    {
                        foreach (DataColumn cl in dt.Columns)
                        {
                            filtro += "ISNULL(" + cl.ColumnName.ToString() + ",'')+' '+";
                        }
                        filtro = filtro.Substring(0, filtro.Length - 5);
                        filtro += " like'%" + tb.Text + "%'";
                        bs.Filter = filtro;
                    }
                }
            }
            catch (Exception ex)
            {
                Maestro_Proveedores.herramientas.MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        #endregion

        private void helpPictureBox_Click(object sender, EventArgs e)
        {
            Help.ShowHelp(this, ConfiguracionDelSistema.manualDeUsuario, HelpNavigator.TableOfContents);
        }

        private void guardarDatosAdjuntosbutton_Click(object sender, EventArgs e)
        {
            if (this.idTextBox.Text.Equals(string.Empty))
                return;

            //-- si el id es menor que cero (nuevo registro), entonces guardo la ruta del archivo en campo archivo_soporteTextBox
            if ((int.Parse(((System.Data.DataRowView)this.pRV_calificacion_financieraBindingSource.Current)["id"].ToString())) <= 0)
            {
                this.Cursor = Cursors.WaitCursor;
                try
                {
                    OpenFileDialog saveFileDialog = new OpenFileDialog();
                    saveFileDialog.Multiselect = false;
                    saveFileDialog.RestoreDirectory = true;

                    if (saveFileDialog.ShowDialog() != DialogResult.OK)
                    {
                        this.Cursor = Cursors.Default;
                        return;
                    }
                    this.archivo_documentosTextBox.Text = saveFileDialog.FileName;
                }
                catch (Exception ex)
                {
                    Maestro_Proveedores.herramientas.MessageException.show(ex);
                }
                this.Cursor = Cursors.Default;
            }
            //-- si el ID es positivo es por que se esta actualizando el registro, en este caso voy a actualizar el soporte
            else
            {
                string temp = string.Empty;
                temp = herramientas.File.newFile(ConfiguracionDelSistema.directorioCalificacionFinanciera);
                if (temp.Equals(string.Empty))
                {
                    //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                    return;
                }
                //--muevo al archivo anterior a la carpeta de archivos eliminados
                if (!herramientas.File.moveFileToReciclerDirectory(ConfiguracionDelSistema.directorioCalificacionFinanciera + this.archivo_documentosTextBox.Text))
                {
                    //  MessageBox.Show("Error moviendo el archivo a la carpeta de eliminados.");
                    return;
                }
                this.archivo_documentosTextBox.Text = temp;
            }
        }

        private void DescargarArchivoPictureBox_Click(object sender, EventArgs e)
        {
            //-- si no se ha seleccionado el proveedor, me salgo
            if (this.idTextBox.Text.Equals(string.Empty))
                return;
            //-- si no hay archivo, me salgo
            if (this.archivo_documentosTextBox.Text.Equals(string.Empty))
                return;                                            
            //-- si el id es menor que cero (nuevo registro), entonces no se descarga nada
            if ((int.Parse(((System.Data.DataRowView)this.pRV_calificacion_financieraBindingSource.Current)["id"].ToString())) <= 0)
                return;
            //-- descargo el archivo
            if(!herramientas.File.copyFile(ConfiguracionDelSistema.directorioCalificacionFinanciera+this.archivo_documentosTextBox.Text))
            {
                //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                return;
            }            
        }

        private void AbrirPictureBox_Click(object sender, EventArgs e)
        {
            //-- si no se ha seleccionado el proveedor, me salgo
            if (this.idTextBox.Text.Equals(string.Empty))
                return;
            //-- si no hay archivo, me salgo
            if (this.archivo_documentosTextBox.Text.Equals(string.Empty))
                return;
            //-- si el id es menor que cero (nuevo registro), entonces no se descarga nada
            if ((int.Parse(((System.Data.DataRowView)this.pRV_calificacion_financieraBindingSource.Current)["id"].ToString())) <= 0)
                return;
            //-- verificar que exista la carpeta Temp
            if (!System.IO.Directory.Exists("C:/Temp"))
                System.IO.Directory.CreateDirectory("C:/Temp");
            //-- guardar el archivo en la carpeta temporal
            if (!herramientas.File.copyFile(ConfiguracionDelSistema.directorioCalificacionFinanciera + this.archivo_documentosTextBox.Text, "C:/Temp/" + this.archivo_documentosTextBox.Text))
            {
                return;
            }
            //-- si el archivo se creo bien, lo abro..
            System.Diagnostics.Process.Start("C:/Temp/" + this.archivo_documentosTextBox.Text);
        }

        private bool guardarArchivoDocumento() 
        {
            if (this.archivo_documentosTextBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe adjuntar un archivo de soporte a la calificacion.");
                return false;
            }

            //-- si el id es menor que cero (nuevo registro), entonces guardo el archivo en el servidor
            if ((int.Parse(((System.Data.DataRowView)this.pRV_calificacion_financieraBindingSource.Current)["id"].ToString())) <= 0)
            {
                string file = string.Empty;
                file = herramientas.File.newFile(this.archivo_documentosTextBox.Text, ConfiguracionDelSistema.directorioCalificacionFinanciera);
                if (file.Equals(string.Empty))
                {
                    //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                    return false;
                }
                this.archivo_documentosTextBox.Text = file;
            }
            return true;
        }

        private bool eliminarArchivoDocumento()
        {
            if (this.archivo_documentosTextBox.Text.Equals(string.Empty))
            {
                MessageBox.Show("Debe adjuntar un archivo de soporte a la calificacion.");
                return false;
            } 
            string file = string.Empty;
            file = herramientas.File.newFile(this.archivo_documentosTextBox.Text, ConfiguracionDelSistema.directorioCalificacionFinanciera);
            if (file.Equals(string.Empty))
            {
                //MessageBox.Show("No fue posible realizar la descarga.\nVerifique que cuenta con los permisos necesarios para realizar esta operación.");
                return false;
            }
            this.archivo_documentosTextBox.Text = file;
            return true;
        }

        private void EncontrarProveedorPictureBox_Click(object sender, EventArgs e)
        {
           //--- el formulario debe estar guardado en la clase redirect, por que es muy pesado y demora mucho al abrirlo.
            try
            {
                herramientas.Redirect.getFormulario("BuscarProveedor").ShowDialog();
                //-- una vez se cierre el asistente utilizo el ID que supuestamente se selecciono de este formulario y lo guardo en el campo de busqueda.
                this.textBox_nit_buscar.Text=((Forms.BuscarProveedor)herramientas.Redirect.getFormulario("BuscarProveedor")).IdEncontrado;
                //-- si el valor no es vacio, tonces realizo la busqueda.
                if (!this.textBox_nit_buscar.Text.Equals(string.Empty)) 
                {
                    this.buscar_Click(null, null);
                }
            }
            catch (Exception ex) 
            {
                herramientas.MessageException.show(ex);
            }
        }

        private void comoSeHaceLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start(ConfiguracionDelSistema.directorioVideoTutoriales + "CalificacionFinanciera.wmv");
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
            }
        }  
    }
}
